package com.techsoul.common.core.pojo;

import com.techsoul.common.core.constant.ApiConstants;
import com.techsoul.common.core.enums.HttpStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @Scope注解，配置spring bean的作用域：
 * 	value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)，这个是说在每次注入的时候回自动创建一个新的bean实例
 * 	value=ConfigurableBeanFactory.SCOPE_SINGLETON)，单例模式，在整个应用中只能创建一个实例
 * 	value=WebApplicationContext.SCOPE_GLOBAL_SESSION)，全局session中的一般不常用
 * 	value=WebApplicationContext.SCOPE_APPLICATION)，在一个web应用中只创建一个实例
 * 	value=WebApplicationContext.SCOPE_REQUEST)，在一个请求中创建一个实例
 * 	value=WebApplicationContext.SCOPE_SESSION)，每次创建一个会话中创建一个实例
 *
 * 	proxyMode=ScopedProxyMode.INTERFACES，创建一个JDK代理模式
 * 	proxyMode=ScopedProxyMode.TARGET_CLASS，基于类的代理模式
 * 	proxyMode=ScopedProxyMode.NO，（默认）不进行代理
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 系统返回编码
	 */
	private Integer code;

	/**
	 * 系统返回消息
	 */
	private String msg;

	/**
	 * 系统返回数据
	 */
	private Object data;

	public Result success(){
		this.code = ApiConstants.RESULT_CODE_SUCCESS;
		this.msg = ApiConstants.RESULT_MESSAGE_SUCCESS;
		this.data = null;
		return this;
	}

	public Result success(Object data){
		this.code = ApiConstants.RESULT_CODE_SUCCESS;
		this.msg = ApiConstants.RESULT_MESSAGE_SUCCESS;
		this.data = data;
		return this;
	}

	public Result error(Object error){
		this.code = HttpStatusEnum.ERROR.getCode();
		this.msg = HttpStatusEnum.ERROR.getMsg();
		this.data = error;
		return this;
	}

	public Result error(Integer code, String msg, Object data){
		this.code = code;
		this.msg = msg;
		this.data = data;
		return this;
	}

}
